package cn.com.zero.manager.auth.mapper;

import cn.com.zero.manager.auth.po.LoginLogPO;
import cn.com.zero.manager.auth.po.ManagerPO;
import cn.com.zero.manager.auth.po.MenuPO;
import cn.com.zero.manager.auth.po.PublicPermissionPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author guoxin
 * @version 1.0.0
 * @Description
 * @date 2023/2/13 15:16
 */
@Mapper
@Repository
public interface IAuthMapper {

    /**
     * 获取用户账号信息
     *
     * @param username  用户名
     * @return
     */
    ManagerPO selectUserByUserId(String username);

    /**
     * 获取用户账号信息
     *
     * @param mobile  手机号
     * @return
     */
    ManagerPO selectUserByUserMobile(String mobile);

    /**
     * 获取用户的角色代码
     *
     * @param userID    用户id
     * @return
     */
    List<String> selectAuthByUserId(String userID);


    /**
     * 获取用户的用户权限PO
     *
     * @param userID    用户id
     * @return
     */
    List<MenuPO> selectMenuByUserId(String userID);

    /**
     * 获取登录失败次数
     *
     * @param userID    用户id
     * @return
     */
    Integer selectErrorCountByUserId(String userID);

    /**
     * 创建记录登录失败次数
     *
     * @param userID    用户id
     */
    void insertErrorLogin(String userID);

    /**
     * 更新记录登录失败次数
     *
     * @param userID    用户id
     * @param count     登录失败次数
     */
    void updateErrorLogin(@Param("userID") String userID,
                          @Param("count") Integer count);

    /**
     * 冻结用户
     *
     * @param userID    用户id
     */
    void freezeUser(String userID);

    /**
     * 删除用户登录失败信息
     *
     * @param userID    用户id
     */
    void DeleteErrorLogin(String userID);

    /**
     * 创建登陆日志
     *
     * @param content       日志内容
     * @param status        状态
     * @param loginIP       登录IP
     * @param loginClient   登录设备
     * @param userid        用户id
     */
    void insertLoginLog(@Param("content") String content,
                        @Param("status") Integer status,
                        @Param("loginIP") String loginIP,
                        @Param("loginClient") Integer loginClient,
                        @Param("userid") String userid);

    /**
     * 查找用户登陆日志信息
     *
     * @param userid    用户id
     * @return
     */
    LoginLogPO selectLoginLog(String userid);

    /**
     * 更新用户信息
     *
     * @param lastLoginTime 上次登录时间
     * @param lastLoginIP   上次登录IP
     * @param userID        用户id
     */
    void updateManager(@Param("lastLoginTime") Date lastLoginTime,
                       @Param("lastLoginIP") String lastLoginIP,
                       @Param("userID") String userID);

    /**
     * 查询公共权限
     *
     * @return
     */
    List<String> selectPublicPermission();

    /**
     * 查询需要登录公共权限
     *
     * @return
     */
    List<String> selectPublicPermissionIsLogin();

}
